<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // Promise对象(实例)的拓展方法  => 官方定义的方法(Promise对象(实例)使用)
    // then()
    // catch()
    // finally()      无论成功和失败都会执行的代码段
    // 用法: p.xxx


    // then(resolveHandler,rejectHandler)  用于指定Promise对象(实例) 状态改变之后要执行的内容(回调函数)  => 返回一个新的Promise对象(链式操作  p.then().then().then())
    // resolveHandler   => 当Promise对象(实例)的状态由pending(进行中) 改为fulfilled(已成功) => 执行此回调函数
    // rejectHandler    => 当Promise对象(实例)的状态由pending(进行中) 改为rejected(已失败) => 执行此回调函数

    // resolveHandler()  rejectHandler()  有一个形参参数,用于接收Promise对象(实例)中存储的数据

    // 可以理解为:then()同步任务 => 先执行 => 提前决定好状态改变之后要执行的内容 => 异步任务执行完毕=>Promise实例状态改变 => 执行既定的回调函数

    // catch(rejectHandler)     是.then(null, rejectHandler)或.then(undefined, rejectHandler)的别名，用于指定发生错误时的回调函数。
    // p.catch = function(rejectHandler){
    //     this.then(null,rejectHandler)
    // }

    // catch可以捕获的错误(哪些操作会把Promise对象变为已失败)
    // 1. new Promise()  调用reject() 方法 => Promise实例会变为rejected(已失败) => 会被catch方法捕获
    // 2.  new Promise()的回调函数代码在执行过程中出现错误, 会被异常捕获机制(try...catch)捕获到 => Promise实例直接变为rejected(已失败)  => 会被catch方法捕获

    // debugger;
    // 执行异步操作 => 根据异步操作的结果改变状态
    // var p = new Promise(function (resolve, reject) { // 形参
    //     console.log(111111);
    //     setTimeout(function () {
    //         // debugger;
    //         var num = 0.1;
    //         console.log(num);
    //         if (num > 0.5) {
    //             resolve("不拖堂");  //  {<fulfilled>:不拖堂}
    //         } else {
    //             reject("拖堂");  // {<rejected>:拖堂}
    //         }
    //         console.log("49:", p);
    //     }, 2000)

    // });
    // console.log("53:", p); // {<pending>:undefined}

    // 用于指定Promise对象(实例) 状态改变之后要执行的内容
    // p.then(function (arg) { // 形参
    //     // debugger;
    //     console.log("fulfilled", arg);
    // }, function (arg) {// 形参
    //     // debugger;
    //     console.log("rejected", arg);
    // })

    // 用于指定发生错误时的回调函数
    // p.catch(function (arg) {
    //     console.log("rejected", arg);
    // })



    // var p1 = new Promise(function () {
    //     aaaa;  // 报错 => 被new Promise()中的异常捕获机制 => 捕获到 => Promise实例直接变为rejected(已失败)
    // })
    // // 用于指定发生错误时的回调函数
    // p1.catch(function (arg) {
    //     console.log("rejected", arg);
    // })


    /*  try {
         fn();
     } catch (err) {
         console.log("被捕获", err);
     }
 
     function fn() {
         setTimeout(function () {
             aaaa;
         }, 100)
     } */
</script>

</html>